home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2005 October / PCWOCT05.iso / Software / FromTheMag / XAMPP 1.4.14 / xampp-win32-1.4.14-installer.exe / xampp / php / pear / HTML / Form.php < prev    next >
PHP Script  |  2004-03-24  |  24KB  |  892 lines

  1. <?php
  2. //
  3. // +----------------------------------------------------------------------+
  4. // | PHP version 4                                                        |
  5. // +----------------------------------------------------------------------+
  6. // | Copyright (c) 1997-2002 The PHP Group                                |
  7. // +----------------------------------------------------------------------+
  8. // | This source file is subject to version 2.0 of the PHP license,       |
  9. // | that is bundled with this package in the file LICENSE, and is        |
  10. // | available at through the world-wide-web at                           |
  11. // | http://www.php.net/license/2_02.txt.                                 |
  12. // | If you did not receive a copy of the PHP license and are unable to   |
  13. // | obtain it through the world-wide-web, please send a note to          |
  14. // | license@php.net so we can mail you a copy immediately.               |
  15. // +----------------------------------------------------------------------+
  16. // | Authors: Stig Bakken <ssb@fast.no>                                   |
  17. // |          Urs Gehrig <urs@circle.ch>                                  |
  18. // +----------------------------------------------------------------------+
  19. //
  20. // $Id: Form.php,v 1.2 2003/02/14 11:12:08 mj Exp $
  21. //
  22. // HTML form utility functions.
  23. //
  24.  
  25. if (!defined('HTML_FORM_TEXT_SIZE')) {
  26.     define('HTML_FORM_TEXT_SIZE', 20);
  27. }
  28.  
  29. if (!defined('HTML_FORM_MAX_FILE_SIZE')) {
  30.     define('HTML_FORM_MAX_FILE_SIZE', 1048576); // 1 MB
  31. }
  32.  
  33. if (!defined('HTML_FORM_PASSWD_SIZE')) {
  34.     define('HTML_FORM_PASSWD_SIZE', 8);
  35. }
  36.  
  37. class HTML_Form
  38. {
  39.     // {{{ properties
  40.  
  41.     /** ACTION attribute of <form> tag */
  42.     var $action;
  43.  
  44.     /** METHOD attribute of <form> tag */
  45.     var $method;
  46.  
  47.     /** NAME attribute of <form> tag */
  48.     var $name;
  49.  
  50.     /** an array of entries for this form */
  51.     var $fields;
  52.  
  53.     /** DB_storage object, if tied to one */
  54.     var $storageObject;
  55.  
  56.     /** TARGET attribute of <form> tag */
  57.     var $target;
  58.  
  59.     /** ENCTYPE attribute of <form> tag */
  60.     var $enctype;
  61.  
  62.     // }}}
  63.  
  64.     // {{{ constructor
  65.  
  66.     function HTML_Form($action, $method = 'get', $name = '', $target = '', $enctype = '')
  67.     {
  68.         $this->action = $action;
  69.         $this->method = $method;
  70.         $this->name = $name;
  71.         $this->fields = array();
  72.         $this->target = $target;
  73.         $this->enctype = $enctype;
  74.     }
  75.  
  76.     // }}}
  77.  
  78.     // {{{ addText()
  79.  
  80.     function addText($name, $title, $default = '',
  81.                      $size = HTML_FORM_TEXT_SIZE, $maxlength = '')
  82.     {
  83.         $this->fields[] = array("text", $name, $title, $default, $size, $maxlength);
  84.     }
  85.  
  86.     // }}}
  87.     // {{{ addPassword()
  88.  
  89.     function addPassword($name, $title, $default, $size = HTML_FORM_PASSWD_SIZE)
  90.     {
  91.         $this->fields[] = array("password", $name, $title, $default, $size);
  92.     }
  93.  
  94.     // }}}
  95.     // {{{ addCheckbox()
  96.  
  97.     function addCheckbox($name, $title, $default)
  98.     {
  99.         $this->fields[] = array("checkbox", $name, $title, $default);
  100.     }
  101.  
  102.     // }}}
  103.     // {{{ addTextarea()
  104.  
  105.     function addTextarea($name, $title, $default,
  106.                          $width = HTML_FORM_TEXTAREA_WT,
  107.                          $height = HTML_FORM_TEXTAREA_HT, $maxlength = '')
  108.     {
  109.         $this->fields[] = array("textarea", $name, $title, $default, $width, $height, $maxlength);
  110.     }
  111.  
  112.     // }}}
  113.     // {{{ addSubmit()
  114.  
  115.     function addSubmit($name = "submit", $title = "Submit Changes")
  116.     {
  117.         $this->fields[] = array("submit", $name, $title);
  118.     }
  119.  
  120.     // }}}
  121.     // {{{ addReset()
  122.  
  123.     function addReset($title = "Discard Changes")
  124.     {
  125.         $this->fields[] = array("reset", $title);
  126.     }
  127.  
  128.     // }}}
  129.     // {{{ addSelect()
  130.  
  131.     function addSelect($name, $title, $entries, $default = '', $size = 1,
  132.                        $blank = '', $multiple = false, $attribs = '')
  133.     {
  134.         $this->fields[] = array("select", $name, $title, $entries, $default,
  135.                                 $size, $blank, $multiple, $attribs);
  136.     }
  137.  
  138.     // }}}
  139.     // {{{ addRadio()
  140.  
  141.     function addRadio($name, $title, $value, $default = false)
  142.     {
  143.         $this->fields[] = array("radio", $name, $title, $value, $default);
  144.     }
  145.  
  146.     // }}}
  147.     // {{{ addImage()
  148.  
  149.     function addImage($name, $src)
  150.     {
  151.         $this->fields[] = array("image", $name, $src);
  152.     }
  153.  
  154.     // }}}
  155.     // {{{ addHidden()
  156.  
  157.     function addHidden($name, $value)
  158.     {
  159.         $this->fields[] = array("hidden", $name, $value);
  160.     }
  161.  
  162.     // }}}
  163.     // {{{ addBlank()
  164.  
  165.     function addBlank($i,$title = '')
  166.     {
  167.         $this->fields[] = array("blank", $i, $title);
  168.     }
  169.  
  170.     // }}}
  171.     // {{{ addFile
  172.  
  173.     function addFile($name, $title, $maxsize = HTML_FORM_MAX_FILE_SIZE,
  174.                      $size = HTML_FORM_TEXT_SIZE, $accept = '') 
  175.     {
  176.         $this->enctype = "multipart/form-data";
  177.         $this->fields[] = array("file", $name, $title, $maxsize, $size, $accept);
  178.     }
  179.  
  180.     // }}}
  181.     // {{{ addPlaintext()
  182.  
  183.     function addPlaintext($title, $text = ' ')
  184.     {
  185.         $this->fields[] = array("plaintext", $title, $text);
  186.     }
  187.  
  188.     // }}}
  189.     // {{{ start()
  190.  
  191.     function start()
  192.     {
  193.         print "<form action=\"" . basename($this->action) . "\" method=\"$this->method\"";
  194.         if ($this->name) {
  195.             print " name=\"$this->name\"";
  196.         }
  197.         if ($this->target) {
  198.             print " target=\"$this->target\"";
  199.         }
  200.         if ($this->enctype) {
  201.             print " enctype=\"$this->enctype\"";
  202.         }
  203.         print ">\n";
  204.     }
  205.  
  206.     // }}}
  207.     // {{{ end()
  208.  
  209.     function end()
  210.     {
  211.         $fields = array();
  212.         reset($this->fields);
  213.         while (list($i, $data) = each($this->fields)) {
  214.             if ($data[0] == 'reset') {
  215.                 continue;
  216.             }
  217.             $fields[$data[1]] = true;
  218.         }
  219.         $this->displayHidden("_fields", implode(":", array_keys($fields)));
  220.         print "</form>";
  221.     }
  222.  
  223.     // }}}
  224.  
  225.     // {{{ displayText()
  226.  
  227.     function displayText($name, $default = '',
  228.                          $size = HTML_FORM_TEXT_SIZE, $maxlength = '')
  229.     {
  230.         if (!$maxlength) {
  231.             print "<input name=\"$name\" value=\"$default\" size=\"$size\"";
  232.         } else {
  233.             print "<input name=\"$name\" value=\"$default\" size=\"$size\" maxlength=\"$maxlength\"";
  234.         }
  235.         print " />";
  236.     }
  237.  
  238.     // }}}
  239.     // {{{ displayTextRow()
  240.  
  241.     function displayTextRow($name, $title, $default = '',
  242.                             $size = HTML_FORM_TEXT_SIZE, $maxlength = '')
  243.     {
  244.         print " <tr>\n";
  245.         print "  <th align=\"right\">$title</th>";
  246.         print "  <td>";
  247.         $this->displayText($name, $default, $size, $maxlength);
  248.         print "</td>\n";
  249.         print " </tr>\n";
  250.     }
  251.  
  252.     // }}}
  253.     // {{{ displayPassword()
  254.  
  255.     function displayPassword($name, $default = '', $size = HTML_FORM_PASSWD_SIZE)
  256.     {
  257.         print "<input name=\"$name\" type=\"password\" value=\"$default\" size=\"$size\" />";
  258.     }
  259.  
  260.     // }}}
  261.     // {{{ displayPasswordRow()
  262.  
  263.     function displayPasswordRow($name, $title, $default = '', $size = HTML_FORM_PASSWD_SIZE)
  264.     {
  265.         print "<tr>\n";
  266.         print "  <th align=\"right\">$title:</th>\n";
  267.         print "  <td>";
  268.         $this->displayPassword($name, $default, $size);
  269.         print " repeat: ";
  270.         $this->displayPassword($name."2", null, $size);
  271.         print "</td>\n";
  272.         print "</tr>\n";
  273.     }
  274.  
  275.     // }}}
  276.     // {{{ displayCheckbox()
  277.  
  278.     function displayCheckbox($name, $default = false)
  279.     {
  280.         print "<input type=\"checkbox\" name=\"$name\"";
  281.         if ($default && $default != 'off') {
  282.             print " CHECKED";
  283.         }
  284.         print " />";
  285.     }
  286.  
  287.     // }}}
  288.     // {{{ displayCheckboxRow()
  289.  
  290.     function displayCheckboxRow($name, $title, $default = false)
  291.     {
  292.         print " <tr>\n";
  293.         print "  <th align=\"right\">$title</th>";
  294.         print "  <td>";
  295.         $this->displayCheckbox($name, $default);
  296.         print "</td>\n";
  297.         print " </tr>\n";
  298.     }
  299.  
  300.     // }}}
  301.     // {{{ displayTextarea()
  302.  
  303.     function displayTextarea($name, $default = '', $width = 40,
  304.                              $height = 5, $maxlength  = '')
  305.     {
  306.         if (!$maxlength) {
  307.             print "<textarea name=\"$name\" cols=\"$width\" rows=\"$height\"";
  308.         } else {
  309.             print "<textarea name=\"$name\" cols=\"$width\" rows=\"$height\" maxlength=\"$maxlength\"";
  310.         }
  311.         print ">";
  312.         print $default;
  313.         print "</textarea>";
  314.     }
  315.  
  316.     // }}}
  317.     // {{{ displayTextareaRow()
  318.  
  319.     function displayTextareaRow($name, $title, $default = '', $width = 40,
  320.                                 $height = 5, $maxlength = '')
  321.     {
  322.         print " <tr>\n";
  323.         print "  <th align=\"right\" valign=\"top\">$title</th>\n";
  324.         print "  <td>";
  325.         $this->displayTextarea($name, $default, $width, $height, $maxlength);
  326.         print "</td>\n";
  327.         print " </tr>\n";
  328.     }
  329.  
  330.     // }}}
  331.     // {{{ displaySubmit()
  332.  
  333.     function displaySubmit($title = 'Submit Changes', $name = "submit")
  334.     {
  335.         print $this->returnSubmit($title, $name);
  336.     }
  337.  
  338.     // }}}
  339.     // {{{ displaySubmitRow()
  340.  
  341.     function displaySubmitRow($name = "submit", $title = 'Submit Changes')
  342.     {
  343.         print $this->returnSubmitRow($name, $title);
  344.     }
  345.  
  346.     // }}}
  347.     // {{{ displayReset()
  348.  
  349.     function displayReset($title = 'Clear contents')
  350.     {
  351.         print $this->returnReset($title);
  352.     }
  353.  
  354.     // }}}
  355.     // {{{ displayResetRow()
  356.  
  357.     function displayResetRow($title = 'Clear contents')
  358.     {
  359.         print $this->returnResetRow($title);
  360.     }
  361.  
  362.     // }}}
  363.     // {{{ displaySelect()
  364.  
  365.     function displaySelect($name, $entries, $default = '', $size = 1,
  366.                            $blank = '', $multiple = false, $attribs = '')
  367.     {
  368.         print $this->returnSelect($name, $entries, $default, $size, $blank,
  369.                                   $multiple, $attribs);
  370.     }
  371.  
  372.     // }}}
  373.     // {{{ displaySelectRow()
  374.  
  375.     function displaySelectRow($name, $title, &$entries, $default = '',
  376.                               $size = 1, $blank = '', $multiple = false, $attribs = '')
  377.     {
  378.         print $this->returnSelectRow($name, $title, $entries, $default, $size,
  379.                                      $blank, $multiple, $attribs);
  380.     }
  381.  
  382.     // }}}
  383.     // {{{ displayHidden()
  384.  
  385.     function displayHidden($name, $value)
  386.     {
  387.         print $this->returnHidden($name, $value);
  388.     }
  389.  
  390.     // }}}
  391.  
  392.     // assuming that $default is the 'checked' attribut of the radio tag
  393.  
  394.     // {{{ displayRadio()
  395.  
  396.     function displayRadio($name, $value, $default = false)
  397.     {
  398.         if ($default == false) {
  399.             print "<input type='radio' name=\"$name\" value=\"$value\" />";
  400.         } else {
  401.             print "<input type='radio' name=\"$name\" checked value=\"$value\" />";
  402.         }
  403.     }
  404.  
  405.     // }}}
  406.     // {{{ displayRadioRow()
  407.  
  408.     function displayRadioRow($name, $title, $value, $default = false)
  409.     {
  410.         print " <tr>\n";
  411.         print "<th align=\"right\">$title</th>";
  412.         print "  <td>";
  413.         $this->displayRadio($name, $value, $default);
  414.         print "</td>\n";
  415.         print " </tr>\n";
  416.     }
  417.  
  418.     // }}}
  419.     // {{{ displayBlank()
  420.  
  421.     function displayBlank()
  422.     {
  423.         print " ";
  424.     }
  425.  
  426.     // }}}
  427.     // {{{ displayBlankRow()
  428.  
  429.     function displayBlankRow($i, $title= '')
  430.     {
  431.         if (!$title) {
  432.             for ($j = 0;$j < $i;$j++) {
  433.                 print " <tr>\n";
  434.                 print "  <th align=\"right\"> </th>";
  435.                 print "  <td>";
  436.                 $this->displayBlank();
  437.                 print "</td>\n";
  438.                 print " </tr>\n";
  439.             }
  440.         } else {
  441.             print " <tr>\n";
  442.             print "  <th align=\"right\">$title</th>";
  443.             print "  <td>";
  444.             $this->displayBlank();
  445.             print "</td>\n";
  446.             print " </tr>\n";
  447.         }
  448.     }
  449.  
  450.     // }}}
  451.     // {{{ displayFile()
  452.  
  453.     function displayFile($name, $maxsize = HTML_FORM_MAX_FILE_SIZE,
  454.                          $size = HTML_FORM_TEXT_SIZE, $accept = '')
  455.     {
  456.         print "<input type=\"file\" name=\"$name\" maxsize=\"$maxsize\" size=\"$size\"";
  457.         if ($accept) {
  458.             print " accept=\"$accept\"";
  459.         }
  460.         print "/>";
  461.  
  462.     }
  463.  
  464.     // }}}
  465.     // {{{ displayFileRow()
  466.  
  467.     function displayFileRow($name, $title, $maxsize = HTML_FORM_MAX_FILE_SIZE,
  468.                             $size = HTML_FORM_TEXT_SIZE, $accept = '')
  469.     {
  470.         print " <tr>\n";
  471.         print "  <th align=\"right\">$title</th>";
  472.         print "  <td>";
  473.         $this->displayFile($name, $maxsize, $size, $accept);
  474.         print "</td>\n";
  475.         print " </tr>\n";
  476.     }
  477.  
  478.     // }}}
  479.     // {{{ displayPlaintext()
  480.  
  481.     function displayPlaintext($text = ' ')
  482.     {
  483.         print $text;
  484.     }
  485.  
  486.     // }}}
  487.     // {{{ displayPlaintextRow()
  488.  
  489.     function displayPlaintextRow($title, $text = ' ')
  490.     {
  491.         print " <tr>\n";
  492.         print "  <th align=\"right\" valign=\"top\">$title</th>";
  493.         print "  <td>";
  494.         $this->displayPlaintext($text);
  495.         print "</td>\n";
  496.         print " </tr>\n";
  497.     }
  498.  
  499.     // }}}
  500.  
  501.     // {{{ returnText()
  502.  
  503.     function returnText($name, $default = '', $size = HTML_FORM_TEXT_SIZE)
  504.     {
  505.         return "<input name=\"$name\" value=\"$default\" size=\"$size\" />";
  506.     }
  507.  
  508.     // }}}
  509.     // {{{ returnTextRow()
  510.  
  511.     function returnTextRow($name, $title, $default = '', $size = HTML_FORM_TEXT_SIZE)
  512.     {
  513.         $str  = " <tr>\n";
  514.         $str .= "  <th align=\"right\">$title:</th>";
  515.         $str .= "  <td>";
  516.         $str .= $this->returnText($name, $default, $size);
  517.         $str .= "</td>\n";
  518.         $str .= " </tr>\n";
  519.  
  520.         return $str;
  521.     }
  522.  
  523.     // }}}
  524.     // {{{ returnPassword()
  525.  
  526.     function returnPassword($name, $default = '', $size = HTML_FORM_PASSWD_SIZE)
  527.     {
  528.         return "<input name=\"$name\" type=\"password\" value=\"$default\" size=\"$size\" />";
  529.     }
  530.  
  531.     // }}}
  532.     // {{{ returnPasswordRow()
  533.  
  534.     function returnPasswordRow($name, $title, $default = '', $size = HTML_FORM_PASSWD_SIZE)
  535.     {
  536.         $str  = "<tr>\n";
  537.         $str .= "  <th align=\"right\">$title:</th>\n";
  538.         $str .= "  <td>";
  539.         $str .= $this->returnPassword($name, $default, $size);
  540.         $str .= " repeat: ";
  541.         $str .= $this->returnPassword($name."2", $default, $size);
  542.         $str .= "</td>\n";
  543.         $str .= "</tr>\n";
  544.  
  545.         return $str;
  546.     }
  547.  
  548.     // }}}
  549.     // {{{ returnCheckbox()
  550.  
  551.     function returnCheckbox($name, $default = false)
  552.     {
  553.         $str = "<input type=\"checkbox\" name=\"$name\"";
  554.         if ($default && $default != 'off') {
  555.             $str .= " checked";
  556.         }
  557.         $str .= " />";
  558.  
  559.         return $str;
  560.     }
  561.  
  562.     // }}}
  563.     // {{{ returnCheckboxRow()
  564.  
  565.     function returnCheckboxRow($name, $title, $default = false)
  566.     {
  567.         $str  = " <tr>\n";
  568.         $str .= "  <th align=\"right\">$title:</th>\n";
  569.         $str .= "  <td>";
  570.         $str .= $this->returnCheckbox($name, $default);
  571.         $str .= "</td>\n";
  572.         $str .= " </tr>\n";
  573.  
  574.         return $str;
  575.     }
  576.  
  577.     // }}}
  578.     // {{{ returnTextarea()
  579.  
  580.     function returnTextarea($name, $default = '', $width = 40, $height = 5)
  581.     {
  582.         $str  = "<textarea name=\"$name\" cols=\"$width\" rows=\"$height\">";
  583.         $str .= $default;
  584.         $str .= "</textarea>";
  585.  
  586.         return $str;
  587.     }
  588.  
  589.     // }}}
  590.     // {{{ returnTextareaRow()
  591.  
  592.     function returnTextareaRow($name, $title, $default = '', $width = 40, $height = 5)
  593.     {
  594.         $str  = " <tr>\n";
  595.         $str .= "  <th align=\"right\">$title:</th>\n";
  596.         $str .= "  <td>";
  597.         $str .= $this->returnTextarea($name, $default, $width, $height);
  598.         $str .= "</td>\n";
  599.         $str .= " </tr>\n";
  600.  
  601.         return $str;
  602.     }
  603.  
  604.     // }}}
  605.     // {{{ returnSubmit()
  606.  
  607.     function returnSubmit($title = 'Submit Changes', $name = "submit")
  608.     {
  609.         return "<input name=\"$name\" type=\"submit\" value=\"$title\" />";
  610.     }
  611.  
  612.     // }}}
  613.     // {{{ returnSubmitRow()
  614.  
  615.     function returnSubmitRow($name = "submit", $title = 'Submit Changes')
  616.     {
  617.         $str  = " <tr>\n";
  618.         $str .= "  <td> </td>\n";
  619.         $str .= "  <td>";
  620.         $str .= $this->returnSubmit($title, $name);
  621.         $str .= "</td>\n";
  622.         $str .= " </tr>\n";
  623.  
  624.         return $str;
  625.     }
  626.  
  627.     // }}}
  628.     // {{{ returnReset()
  629.  
  630.     function returnReset($title = 'Clear contents')
  631.     {
  632.         return "<input type=\"reset\" value=\"$title\" />";
  633.     }
  634.  
  635.     // }}}
  636.     // {{{ returnResetRow()
  637.  
  638.     function returnResetRow($title = 'Clear contents')
  639.     {
  640.         $str  = " <tr>\n";
  641.         $str .= "  <td> </td>\n";
  642.         $str .= "  <td>";
  643.         $str .= $this->returnReset($title);
  644.         $str .= "</td>\n";
  645.         $str .= " </tr>\n";
  646.  
  647.         return $str;
  648.     }
  649.  
  650.     // }}}
  651.     // {{{ returnSelect()
  652.  
  653.     function returnSelect($name, $entries, $default = '', $size = 1,
  654.                            $blank = '', $multiple = false, $attrib = '')
  655.     {
  656.         if ($multiple && substr($name, -2) != "[]") {
  657.             $name .= "[]";
  658.         }
  659.         $str = "   <select name=\"$name\"";
  660.         if ($size) {
  661.             $str .= " size=\"$size\"";
  662.         }
  663.         if ($multiple) {
  664.             $str .= " multiple=\"multiple\"";
  665.         }
  666.         if ($attrib) {
  667.             $str .= " $attrib";
  668.         }
  669.         $str .= ">\n";
  670.         if ($blank) {
  671.             $str .= "    <option value=\"\">$blank</option>\n";
  672.         }
  673.         while (list($val, $text) = each($entries)) {
  674.             $str .= '    <option ';
  675.                 if ($default) {
  676.                     if ($multiple && is_array($default)) {
  677.                         if ((is_string(key($default)) && $default[$val]) ||
  678.                             (is_int(key($default)) && in_array($val, $default))) {
  679.                             $str .= 'selected="selected" ';
  680.                         }
  681.                     } elseif ($default == $val) {
  682.                         $str .= 'selected="selected" ';
  683.                     }
  684.                 }
  685.             $str .= "value=\"$val\">$text</option>\n";
  686.         }
  687.         $str .= "   </select>\n";
  688.  
  689.         return $str;
  690.     }
  691.  
  692.     // }}}
  693.     // {{{ returnSelectRow()
  694.  
  695.     function returnSelectRow($name, $title, &$entries, $default = '', $size = 1,
  696.                               $blank = '', $multiple = false, $attribs = '')
  697.     {
  698.         $str  = " <tr>\n";
  699.         $str .= "  <th align=\"right\">$title</th>\n";
  700.         $str .= "  <td>\n";
  701.         $str .= $this->returnSelect($name, $entries, $default, $size, $blank, $multiple, $attribs);
  702.         $str .= "  </td>\n";
  703.         $str .= " </tr>\n";
  704.  
  705.         return $str;
  706.     }
  707.  
  708.     // }}}
  709.     // {{{ returnHidden()
  710.  
  711.     function returnHidden($name, $value)
  712.     {
  713.         return "<input type=\"hidden\" name=\"$name\" value=\"$value\" />";
  714.     }
  715.  
  716.     // }}}
  717.     // {{{ returnFile()
  718.  
  719.     function returnFile($name = 'userfile',
  720.                         $maxsize = HTML_FORM_MAX_FILE_SIZE,
  721.                         $size = HTML_FORM_TEXT_SIZE)
  722.     {
  723.         $str  = " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$maxsize\" />";
  724.         $str .= " <input type=\"file\" name=\"$name\" size=\"$size\" />";
  725.         return $str;
  726.     }
  727.  
  728.     // }}}
  729.     // {{{ returnMultipleFiles()
  730.  
  731.     function returnMultipleFiles($name = 'userfile[]',
  732.                                  $maxsize = HTML_FORM_MAX_FILE_SIZE,
  733.                                  $files = 3,
  734.                                  $size = HTML_FORM_TEXT_SIZE)
  735.     {
  736.         $str  = " <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"$maxsize\" />";
  737.         for($i=0; $i < $files; $i++) {
  738.            $str .= " <input type=\"file\" name=\"$name\" size=\"$size\" /><br />";
  739.         }
  740.         return $str;
  741.     }
  742.  
  743.     // }}}
  744.     // {{{ returnStart()
  745.  
  746.     function returnStart($multipartformdata = false)
  747.     {
  748.         $str = "<form action=\"" . basename ($this->action) . "\" method=\"$this->method\"";
  749.         if ($this->name) {
  750.             $str .= " name=\"$this->name\"";
  751.         }
  752.         if ($multipartformdata) {
  753.             $str .= " enctype=\"multipart/form-data\"";
  754.         }
  755.         $str .= ">";
  756.  
  757.         return $str;
  758.     }
  759.  
  760.     // }}}
  761.     // {{{ returnEnd()
  762.  
  763.     function returnEnd()
  764.     {
  765.         $fields = array();
  766.         reset($this->fields);
  767.         while (list($i, $data) = each($this->fields)) {
  768.             if ($data[0] == 'reset') {
  769.                 continue;
  770.             }
  771.             $fields[$data[1]] = true;
  772.         }
  773.         $ret = $this->returnHidden("_fields", implode(":", array_keys($fields)));
  774.         $ret .= "</form>";
  775.         return $ret;
  776.     }
  777.  
  778.     // }}}
  779.     // {{{ returnPlaintext()
  780.  
  781.     function returnPlaintext($text = ' ')
  782.     {
  783.         return $text;
  784.     }
  785.  
  786.     // }}}
  787.     // {{{ returnPlaintextRow()
  788.  
  789.     function returnPlaintextRow($title, $text = ' ')
  790.     {
  791.         $str  = " <tr>\n";
  792.         $str .= "  <th align=\"right\">$title:</th>";
  793.         $str .= "  <td>";
  794.         $str .= $this->returnPlaintext($text);
  795.         $str .= "</td>\n";
  796.         $str .= " </tr>\n";
  797.  
  798.         return $str;
  799.     }
  800.  
  801.     // }}}
  802.  
  803.     // {{{ display()
  804.  
  805.     function display()
  806.     {
  807.         $arrname = 'HTTP_'.strtoupper($this->method).'_VARS';
  808.         $arr = &$GLOBALS[$arrname];
  809.         $this->start();
  810.         print "<table>\n";
  811.         reset($this->fields);
  812.         $hidden = array();
  813.         foreach ($this->fields as $i => $data) {
  814.             switch ($data[0]) {
  815.                 case "hidden":
  816.                     $hidden[] = $i;
  817.                     $defind = 0;
  818.                     continue 2;
  819.                 case "reset":
  820.                     $params = 1;
  821.                     $defind = 0;
  822.                     break;
  823.                 case "submit":
  824.                 case "blank": // new
  825.                     $params = 2;
  826.                     $defind = 0;
  827.                     break;
  828.                 case "image":
  829.                     $params = 2;
  830.                     $defind = 0;
  831.                     break;
  832.                 case "checkbox":
  833.                     $params = 3;
  834.                     $defind = 2;
  835.                     break;
  836.                 case "file":  //new
  837.                 case "text":
  838.                     $params = 5;
  839.                     $defind = 3;
  840.                     break;
  841.                 case "password":
  842.                 case "radio":
  843.                     $params = 4;
  844.                     $defind = 3;
  845.                     break;
  846.                 case "textarea":
  847.                     $params = 6;
  848.                     $defind = 3;
  849.                     break;
  850.                 case "select":
  851.                     $params = 8;
  852.                     $defind = 4;
  853.                     break;
  854.                 case "plaintext":
  855.                     $params = 2;
  856.                     $defind = 1;
  857.                     break;
  858.                 default:
  859.                     // unknown field type
  860.                     continue 2;
  861.             }
  862.             $str = '$this->display'.ucfirst($data[0])."Row(";
  863.             for ($i = 1;$i <= $params;$i++) {
  864.                 if ($i == $defind && $data[$defind] === null && isset($arr[$data[1]])) {
  865.                     $str .= "\$arr['$data[1]']";
  866.                 } else {
  867.                     $str .= '$'."data[$i]";
  868.                 }
  869.                 if ($i < $params) $str .= ', ';
  870.             }
  871.             $str .= ');';
  872.             eval($str);
  873.         }
  874.         print "</table>\n";
  875.         for ($i = 0;$i < sizeof($hidden);$i++) {
  876.             $this->displayHidden($this->fields[$hidden[$i]][1],
  877.                                  $this->fields[$hidden[$i]][2]);
  878.         }
  879.         $this->end();
  880.     }
  881.  
  882.     // }}}
  883. }
  884.  
  885. /*
  886. * Local variables:
  887. * tab-width: 4
  888. * c-basic-offset: 4
  889. * End:
  890. */
  891. ?>
  892.